package collection.list;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * 1.基于动态数组
 * 2.线程安全（基于ReentrantLock实现）
 */
public class CopyOnWriteArrayListTest {

    public static void main(String[] args) {
        List<String> list = new CopyOnWriteArrayList<String>();

        // 写加锁
        list.add("aaa");

        // 读不加锁
        list.get(0);
    }

    /**
     * CopyOnWriteArrayList并发优化思路：写时复制 与 弱一致性
     * 所谓写时复制，即任何要改变CopyOnWriteArrayList的操作（add、set等），其内部实现都是深拷贝一份CopyOnWriteArrayList的底层数组，然后在深拷贝的副本上进行数据的修改。
     * 修改完成后，再用新的副本与替换原来的CopyOnWriteArrayList底层数组。
     */

}
